package com.opNaga.bpmp.flowObject.activity;

import com.opNaga.bpmp.BPMPElement;
import com.opNaga.bpmp.artifact.Groupable;
import com.opNaga.bpmp.artifact.Grouper;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * User: Junyi BEI
 * Date: 19/01/2012
 * Time: 13:59
 */
public class Task extends Activity implements Groupable {
  private Set<BPMPElement> groupers = new HashSet<BPMPElement>();

  public Task() {
    super();
  }

  public Task(String t) {
    super(t);
  }

  @Override
  public String getType() {
    return "Task";
  }

  public boolean addGrouper(BPMPElement be) {
    if(!Grouper.class.isAssignableFrom(be.getClass())) {
      return standardMessage(670, be);
    }
    if(groupers.add(be)) {
      return standardMessage(671, be);
    }
    return standardMessage(692, be);
  }

  public boolean removeGrouper(BPMPElement be) {
    if(!Grouper.class.isAssignableFrom(be.getClass())) {
      return standardMessage(680, be);
    }
    if(groupers.remove(be)) {
      return standardMessage(681, be);
    }
    return standardMessage(693, be);
  }

  public Iterator<BPMPElement> iterateGroupers() {
    return new ArrayList<BPMPElement>(groupers).iterator();
  }
}
